mod spiral_prime;

fn main() {
    let num = spiral_prime::min_edge_prime_num(7);
    println!("{num}");
}


// (60, "5,5"),
// (55, "9,9"),
// (50, "11,10"),
// (40, "31,23"),
// (30, "49,28"),
// (20, "309,123"),
// (10, "26241,5248"),
// (9,  "74373,13387"),
// (8,  "238733,38197"),
// (7,  "1213001,169820"),


// use std::fs::File;
// use std::io::{self, BufRead, BufReader, Write};
// use std::path::Path;
// use std::time::Instant;

// // 使用筛法生成素数并保存到文件
// fn generate_primes_to_file(filename: &str, limit: i64) -> io::Result<()> {
//     println!("开始生成素数...");
//     let start = Instant::now();

//     // 创建布尔数组，初始都标记为true
//     let mut is_prime = vec![true; limit as usize + 1];
//     is_prime[0] = false;
//     is_prime[1] = false;

//     // 埃氏筛
//     let sqrt_limit = (limit as f64).sqrt() as i64;
//     for i in 2..=sqrt_limit {
//         if is_prime[i as usize] {
//             let mut j = i * i;
//             while j <= limit {
//                 is_prime[j as usize] = false;
//                 j += i;
//             }
//         }
//     }

//     // 将素数写入文件
//     let mut file = File::create(filename)?;
//     for i in 2..=limit {
//         if is_prime[i as usize] {
//             writeln!(file, "{}", i)?;
//         }
//     }

//     let duration = start.elapsed();
//     println!("素数生成完成，用时: {:?}", duration);
//     Ok(())
// }

// // 从文件中读取素数到HashSet
// fn load_primes_from_file(filename: &str) -> io::Result<std::collections::HashSet<i64>> {
//     let file = File::open(filename)?;
//     let reader = BufReader::new(file);
//     let mut primes = std::collections::HashSet::new();

//     for line in reader.lines() {
//         if let Ok(num) = line?.parse::<i64>() {
//             primes.insert(num);
//         }
//     }

//     Ok(primes)
// }

// // 检查数字是否为素数
// fn is_prime(number: i64, primes: &std::collections::HashSet<i64>) -> bool {
//     primes.contains(&number)
// }

// fn main() -> io::Result<()> {
//     let filename = "primes.txt";
//     let limit = 100_000_000; // 可以根据需要调整上限

//     // 如果文件不存在，则生成素数文件
//     if !Path::new(filename).exists() {
//         generate_primes_to_file(filename, limit)?;
//     }

//     // 加载素数到内存
//     println!("正在加载素数文件...");
//     let start = Instant::now();
//     let primes = load_primes_from_file(filename)?;
//     println!("加载完成，用时: {:?}", start.elapsed());
//     println!("总共加载了 {} 个素数", primes.len());

//     // 测试一些数字
//     let test_numbers = vec![2, 3, 4, 5, 97, 100, 997, 1000];
//     for &n in &test_numbers {
//         println!("{} {}", n, if is_prime(n, &primes) { "是素数" } else { "不是素数" });
//     }

//     Ok(())
// }

// #[cfg(test)]
// mod tests {
//     use super::*;

//     #[test]
//     fn test_prime_checking() -> io::Result<()> {
//         let filename = "test_primes.txt";
//         generate_primes_to_file(filename, 1000)?;
//         let primes = load_primes_from_file(filename)?;

//         assert!(is_prime(2, &primes));
//         assert!(is_prime(3, &primes));
//         assert!(!is_prime(4, &primes));
//         assert!(is_prime(5, &primes));
//         assert!(!is_prime(6, &primes));
//         assert!(is_prime(7, &primes));
//         assert!(is_prime(997, &primes));
//         assert!(!is_prime(1000, &primes));

//         std::fs::remove_file(filename)?;
//         Ok(())
//     }
// }